package com.ingesup.caribou.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketClient
{
	private String targetIP;
	private int targetPort;
	private BufferedReader userInput;
	private BufferedReader receiveData;
	private String dataToReceive;
	private PrintWriter modifiedSentence;
	private Socket sock;
	
	/**
	 * Constructeur 
	 * parametres :
	 * iptarget : adresse IP du server cible
	 * porttarget : port utilisé
	 **/
	
	public SocketClient(String iptarget, int porttarget)
	{
		this.targetIP = iptarget;
		this.targetPort = porttarget;
	}
	
	/**
	 * Appeler Closeconnection() pour fermer la connection
	 * une fois l'échange termine 
	 */
	public void CloseConnection() throws IOException
	{
		this.modifiedSentence.close();
		this.userInput.close();
		this.receiveData.close();
		this.sock.close();
	}
	
	
	/**
	 * Appeler StartConnection() pour initialiser la connection
	 * avec le serveur et pouvoir echanger des donnees
	 */
	public void StartConnection() throws UnknownHostException, IOException
	{
		this.userInput = new BufferedReader(new InputStreamReader(System.in));
		this.sock = new Socket(this.targetIP, this.targetPort);
		this.modifiedSentence = new PrintWriter(this.sock.getOutputStream(), true);
		this.receiveData = new BufferedReader(new InputStreamReader(this.sock.getInputStream()));
	}
	
	/**
	 * Appeler ExchangeData() une fois la communication etablie
	 * avec StartConnection().
	 * Placer cette methode dans une boucle qui bouclera tant
	 * qu'il y aura des données à échanger.
	 * Le parametre stringToSend est la chaine de caracteres a envoyer
	 * au serveur.
	 * La valeur de retour de cette methode est la chaine de
	 * caractere qui est la reponse du serveur.
	 */
	public String ExchangeData(String stringToSend) throws IOException
	{
		this.modifiedSentence.println(stringToSend);
		this.dataToReceive = this.receiveData.readLine();
		return this.dataToReceive;
	}
}
